package main

import "fmt"

func main(){

	var s1 []int
	fmt.Println(s1)
	fmt.Printf("%T",s1)


	//从数组中创建 切片

	a:=[10]int{1,2,3,4,5,7,8,9}

	fmt.Println(a)

	slice1:=a[0:3]
	slice2:=a[5:]
	fmt.Println(slice1)
	fmt.Println(slice2)
	//  打印内存地址
	fmt.Printf("%p\n",&a)   //0xc000014280
	fmt.Printf("%p\n",&slice1)   //0xc0000044c0
	fmt.Printf("%p\n",&slice2)   //0xc0000044e0

	//切片的长度 和容量
	fmt.Println(len(slice1),cap(slice1))   //3 10   容量一般到 末尾
	fmt.Println(len(slice2),cap(slice2))   //5 5

	//切片的 扩容
	slice2= append(slice2, 2,2,2,2,2)
	fmt.Println(slice2)   //[7 8 9 0 0 2 2 2 2 2]

	fmt.Printf("%p\n",&slice2)  //0xc0000044e0

	//切片是引用类型  如何展示

	//a1  a2 是数组
	a1:=[4]int{1,2,3,4}
	a2:=a1   //a1赋值给阿  是值传递   之后 修改 a1的值 a2不发生变化
	a1[2]=45
	fmt.Println(a1,a2)   // [1 2 45 4]     [1 2 3 4]


   //定义切片
   s2:=[]int{1,2,3,4}
   s3:=s1
   fmt.Println(s2,s3)  //打印切片的值  [1 2 3 4] []

   s2[0]=44   //修改s2切片的值     s2的值也发生变化
   fmt.Println(s2,s3)  //打印切片的值  [44 2 3 4] []
}
